package fiuba.algo3.TPFinal;


public class Posicion {
	private int valorX;
	private int valorY;
	private Superficie superficie;
	private Matriz mx;
	
	public Posicion(int X,int Y,Matriz matriz){
		this.valorX = X+1;
		this.valorY = Y+1;
		superficie = null;
		this.mx = matriz;
	}
	public int obtenerCoordX(){
		return this.valorX;
	};
	public int obtenerCoordY(){
		return this.valorY;
	};
	public Posicion obtenerSiguienteDerecha(){
		   Posicion siguiente;
		   siguiente = this.mx.obtenerPosicionXeY(this.valorX+1, this.valorY) ;
			
		   return siguiente ;
				
	} 
public boolean tieneSigDerecha(){return (this.obtenerSiguienteDerecha()!=null); };
public boolean tieneSigIzquierda(){return (this.obtenerSiguienteIzquierda()!=null);};
public boolean tieneSigArriba(){return (this.obtenerSiguienteArriba()!=null);};
public boolean tieneSigAbajo(){return (this.obtenerSiguienteAbajo()!=null);};
public boolean tieneSigArribaDerecha(){return (this.obtenerSiguienteArribaDerecha()!=null);};
public boolean tieneSigArribaIzquierda(){return (this.obtenerSiguienteArribaIzquierda()!=null);};
public boolean tieneSigAbajoDerecha(){return (this.obtenerSiguienteAbajoDerecha()!=null);};
public boolean tieneSigAbajoIzquierda(){return (this.obtenerSiguienteAbajoIzquierda()!=null);};


public Posicion obtenerSiguienteArribaDerecha(){
		
		return mx.obtenerPosicionXeY(this.valorX+1,this.valorY-1);
				
	} 
public Posicion obtenerSiguienteAbajoDerecha(){
	
	return mx.obtenerPosicionXeY(this.valorX+1,this.valorY+1);
			
} 
	
public Posicion obtenerSiguienteIzquierda(){
	
	return mx.obtenerPosicionXeY(this.valorX-1,this.valorY);
			
}
public Posicion obtenerSiguienteArribaIzquierda(){
	
	return mx.obtenerPosicionXeY(this.valorX-1,this.valorY-1);
			
}
public Posicion obtenerSiguienteAbajoIzquierda(){
	
	return mx.obtenerPosicionXeY(this.valorX-1,this.valorY+1);
			
}
public Posicion obtenerSiguienteAbajo(){
	
	return mx.obtenerPosicionXeY(this.valorX,this.valorY+1);
			
}
public Posicion obtenerSiguienteArriba(){
	
	return mx.obtenerPosicionXeY(this.valorX,this.valorY-1);
			
}
	public void insertarSuperficie(Superficie superficie ){
		this.superficie = superficie;
	}
	public Superficie obtenerSuperficie(){
		return this.superficie;
	};
	public boolean esPosicionXY(int X,int Y){
		 return((this.valorX==X)&&(this.valorY==Y));
		
	}
	public void MostrarCoordenada() {
		 System.out.print(this.valorX);
		 System.out.print(" ");
		 System.out.print(this.valorY);
		
	};
	public int calcularDistancia(Posicion pos){
		 int difX=this.calcularModulo(this.valorX, pos.valorX);
		 int difY=this.calcularModulo(this.valorY, pos.valorY);
		 if(difX<difY){ return difY;}
		 return difX;
	}
	
	public int calcularModulo(Integer valor1,Integer valor2){

		return Math.abs(valor1-valor2);
	} 

}
